package cn.dxj1016.syn;

import java.util.ArrayList;

//线程不安全集合
public class UnsafeList {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            new Thread(()->
            {
                synchronized (strings) {
                    strings.add(Thread.currentThread().getName());
                }
//                strings.add(Thread.currentThread().getName());

            }).start();
        }
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(strings.size());
    }
}
/*
执行结果可能不为10000
因为线程是不安全的，可能在某一时刻两个线程同时执行了，那么就在数组的同个方法，导致出来的没有10000个
加锁之后，如果不加延迟还是小于1000的，可能是电脑运行速度太快了，线程里add还没执行完就执行主线程的打印语句，最后实际结果其实还是1000
 */